/*!
 *  \file       SimpleRandomGenerator.cpp
 *  \brief      Implementazione della classe \c SimpleRandomGenerator
 *  \author     Davide Scola <S2299453@studenti.unige.it>
 *  \author	Minetti Alberto <S3064777@studenti.unige.it>
 *  \version    1.0
 */
#include "IEntropyGenerator.hpp"
#include "IRandomGenerator.hpp"
#include "SimpleRandomGenerator.hpp"

using namespace std;


/*!
 *  \brief      Costruttore di copia di \c SimpleRandomGenerator
 *  \param[in]	other	generatore da copiare
 */
template < typename tType >
SimpleRandomGenerator< tType >::SimpleRandomGenerator( SimpleRandomGenerator< tType > const& other )
{
  this->entropy_ = (&other)->entropy_;
}

/*!
 *  \brief      Costruttore di \c SimpleRandomGenerator
 *  \param[in]	entropy		generatore di entropia da utilizzare
 */
template < typename tType >
SimpleRandomGenerator< tType >::SimpleRandomGenerator( IEntropyGenerator & entropy )
{
  this->entropy_ = &entropy;
}

/*!
 *  \brief      Operatore di assegnazione della classe \c SimpleRandomGenerator
 */
template < typename tType > SimpleRandomGenerator< tType >&
SimpleRandomGenerator< tType >::operator=( const SimpleRandomGenerator& other )
{
   if (this == &other) {
       return *this;
   }
   
   this->entropy_ = (&other)->entropy_;
   return *this;
}


/*!
 *  \brief      Ritorna un nuovo numero pseudo-casuale
 */
template < typename tType > tType
SimpleRandomGenerator< tType >::next( void )
{
  return ( tType )this->entropy_->gather( );
}
